package mx.ipn.persistencia.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import mx.ipn.to.DetalleFacturaTO;
import mx.ipn.persistencia.dao.DetalleFacturaDAO;

public class DetalleFacturaDAOMySQL implements DetalleFacturaDAO {
	static{FabricaDeDAOsMySQL.iniciaLog(DetalleFacturaDAOMySQL.class);}

	private static final String INSERT = "INSERT INTO detalle_factura (id_detalle_factura,id_factura,id_operacion) VALUES(?,?,?)";
	private static final String UPDATE = "UPDATE detalle_factura SET id_detalle_factura=?,id_factura=?,id_operacion=? WHERE id_detalle_factura=?";
	private static final String SELECT = "SELECT * FROM detalle_factura";
	private static final String FINDBYID = "SELECT * FROM detalle_factura WHERE id_detalle_factura=?";
	private static final String SELECTBYFACTURA = "SELECT * FROM detalle_factura WHERE id_factura=?";
	private static final String DELETE = "DELETE FROM detalle_factura WHERE id_factura=?";
	public boolean insertDetalleFactura(DetalleFacturaTO detallefactura) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(INSERT);

			ps.setInt(1, detallefactura.getIdDetalleFactura());
			ps.setInt(2, detallefactura.getIdFactura());
			ps.setInt(3, detallefactura.getIdOperacion());
			ps.executeUpdate();

			ps.close();
			conexion.close();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	public short deleteDetalleFactura(int idFactura){
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(DELETE);

			ps.setInt(1, idFactura);

			ps.executeUpdate();
			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short)-1;
		}
	}
	public ArrayList<DetalleFacturaTO> selectDetalleFactura() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			ArrayList<DetalleFacturaTO> detalleFacturaTO = null;
			DetalleFacturaTO detalleFacturaTO2 = null;

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (detalleFacturaTO == null) {
					detalleFacturaTO = new ArrayList<DetalleFacturaTO>();
				}

				int idDetallePrefactura = rs.getInt("id_detalle_factura");
				int idFactura = rs.getInt("id_factura");
				int idOperacion = rs.getInt("id_operacion");
				detalleFacturaTO2 = new DetalleFacturaTO(idDetallePrefactura,idFactura,idOperacion);
				detalleFacturaTO.add(detalleFacturaTO2);
			}
			ps.close();
			conexion.close();
			return detalleFacturaTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public  ArrayList<DetalleFacturaTO> selectDetalleFacturaByFactura(int idFactura) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			ArrayList<DetalleFacturaTO> detalleFacturaTO = null;
			DetalleFacturaTO detalleFacturaTO2 = null;
			PreparedStatement ps = conexion.prepareStatement(SELECTBYFACTURA);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				if (detalleFacturaTO == null) {
					detalleFacturaTO = new ArrayList<DetalleFacturaTO>();
				}

				int idDetallePrefactura = rs.getInt("id_detalle_factura");
				idFactura = rs.getInt("id_factura");
				int idOperacion = rs.getInt("id_operacion");
				detalleFacturaTO2 = new DetalleFacturaTO(idDetallePrefactura,idFactura,idOperacion);
				detalleFacturaTO.add(detalleFacturaTO2);
			}
			ps.close();
			conexion.close();
			return detalleFacturaTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public short updateDetalleFactura(DetalleFacturaTO detalleFacturaTO) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setInt(1, detalleFacturaTO.getIdDetalleFactura());
			ps.setInt(2, detalleFacturaTO.getIdFactura());
			ps.setInt(3, detalleFacturaTO.getIdOperacion());

			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}

	public DetalleFacturaTO findByID(int idDetallefactura) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYID);
			ps.setInt(1, idDetallefactura);
			ResultSet rs = ps.executeQuery();
			if (rs.next()) {
				int idDetallePrefactura = rs.getInt("id_detalle_factura");
				int idFactura = rs.getInt("id_factura");
				int idOperacion = rs.getInt("id_operacion");
				DetalleFacturaTO detalleFacturaTO = new DetalleFacturaTO(idDetallePrefactura,idFactura,idOperacion);
				ps.close();
				conexion.close();
				return detalleFacturaTO;
			}
			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
